English-language folk songs have a long tradition and have changed over time. Songs are not easily idenifiable by name alone, and lyrics often have variations. Steve Roud began indexing his own collection in the 1970s, and his Roud Index has become the standard for grouping together different versions of the same song. He is still indexing as of 2023.
Could a machine learning algorithm hope to match his skill? Given the lyrics, would it choose the same groupings of songs, where the line between "same" and "different" is fuzzy? Could it help with future indexing?
Although the Roud index is a lyrics-based classification system (rather than tune-based), the officially-hosted index at vwml.com does not contain lyric transcriptions as a standard data field. Some lyrics are accessible online, presented in scanned images of historical collections, others on linked external sites, others not at all.
So the first challenge is to get a dataset with enough full lyrics and Roud numbers in combination. The main contenders for the source of this data are Mudcat and The Traditional Ballad Index, both well-established online song databases.
* This is a similar to approach to Roud, but focused on the basic unit of a song rather than its individual instances (e.g. variations, songbook entries or performances), and therefore uses song titles as its main identifiers, with keywords and first line for disambiguation.
Neither the Ballad Index (which would have included ST lyrics) nor the Mudcat Digitrad downloadable databases will open.
In order to link Roud numbers to lyrics, I therefore need to work with the .txt version of the Ballad Index (which does not include ST) as my base for a new database, extract the records from it, then join ST and DT's lyrics to these records using the various references provided in each data source.
To link the lyrics correctly to the main data of the BI, I need fields that act as idenifiers/keys:
Alphanumeric filename serving as an identifier for all BI records, also referenced by ST lyrics where they exist.
8.3 filename (all-caps without extension) serving as an identifier for all DT records, also sometimes referenced in BI.
DT number: Many records in DT and BI also contain a 'DT #'. This number is not the same as the DT file, and, contrary to my first assumption, nor does it correspond to the SongID in Mudcat URLs (e.g. http://mudcat.org/@displaysong.cfm?SongID=329). It appears to be another grouping system developed by Mudcat and intended to extend Child numbers (see below): "Francis J. Child only went up to 305--since there are ballads he didn't include, you may notice some numbers like DT #510 . Not to worry--it just helps locate variants".
Roud number: Found in BI only (at least as far as downloadable data is concerned - song lyrics on Mudcat's website do often include this).
Child number: The Child Ballads were the first large collection of songs of English and Scottish origin collected by Francis James Child in the 1800s. Many songs contained multiple versions. Child numbers (1-305) are often referenced in folk song sources.
Laws number: George Malcolm Laws and the American Folklore Society published a collection of traditional songs in 1957. Laws numbers contain an initial letter which indicates the song's theme, e.g. 'M: Ballads of Family Opposition to Lovers'. Laws numbers are also commonly referenced.
Other collections: References to other collections are sometimes found, and some of these also have their own numbers for songs.
Based on text editor finds I estimate I can extract approximately the following data [with comparisons for a Google domain search of online versions]:
Below is a preview of balldidx.txt. The text version of the Ballad Index file is tricky to work with as entries are presented as a list with inconsistent headings and mixed data.
I first used a text editor to place colons before Roud numbers and DT filenames, so that they could be more easily matched. (This could have been perhaps better achieved with regex, although to begin I decided to save myself a step as they were formatted inconsistently.)
Here it is interesting to note that the BI database also references Mudcat's DT filenames, for example 'DT, MASS1913*' above. This means we can also supplement lyrics by cross-referencing this data.
===
VERSION 6.5, February 26, 2023
===
NAME: 10,000 Years Ago: see I Was Born About Ten Thousand Years Ago (Bragging Song) (File: R410)
===
NAME: 10th MTB Flotilla Song: see Fred Karno's Army (File: NeFrKaAr)
===
NAME: 13 Highway
DESCRIPTION: "I went down 13 highway, Down in my baby's door Raining and storming, Scarcely see the road." "Clouds dark as night, If my baby don't fail me I'll make every thing all right" "Going 60 miles an hour..." "Don't the highway look lonesome..."
AUTHOR: unknown
EARLIEST_DATE: 1938 (recording, Walter Davis)
KEYWORDS: grief love promise nonballad lover technology
FOUND_IN: US(SE)
REFERENCES: (0 citations)
Roud #29487
RECORDINGS:
Walter Davis, "13 Highway" (Bluebird B7693, 1938)
Moses Williams, "13 Highway" (on USFlorida01)
NOTES: Moses Williams sings "I always wonder why ... That woman didn't treat me right." The description follows the Walter Davis recording. - BS
Last updated in version 5.0
File: Rc13Hwy
===
NAME: 151 Days: see Hundred and Fifty-One Days (File: Colq060)
===
NAME: 1861 Anti Confederation Song, An: see Anti-Confederation Song (File: FJ028)
===
NAME: 1913 Massacre
DESCRIPTION: In Calumet, Michigan, striking copper miners and their children are having a Christmas celebration; strike-breakers outside bar the doors then raise a false fire alarm. In the ensuing stampede, seventy-three children are crushed or suffocated
AUTHOR: Woody Guthrie
EARLIEST_DATE: 1945 (recording by author)
KEYWORDS: lie strike death labor-movement mining disaster children
FOUND_IN: US
REFERENCES: (3 citations)
Greenway-AmericanFolksongsOfProtest, pp. 157-158, "1913 Massacre"
Silber/Silber-FolksingersWordbook, p. 306, "The 1913 Massacre" (1 text)
DT, MASS1913*
Roud #17663
RECORDINGS:
Woody Guthrie, "1913 Massacre" (Asch 360, 1945; on Struggle1, Struggle2)
CROSS_REFERENCES:
cf. "One Morning in May (To Hear the Nightingale Sing)" (tune)
NOTES: In the late 19th/early 20th century, the rapid expansion of the electrical industry created great demand for copper, for which the chief source was the mines in the upper peninsula of Michigan. Bitter strikes resulted as the miners, under the leadership of the Western Federation of Miners, demanded decent pay and safer working conditions.
Guthrie's description of the events of 1913 is dead-on accurate, according to the residents of Calumet; Italian Hall, where the disaster occurred, was still standing in the early 1980s, but has since been torn down. - PJS
There is an historical marker on the site (Italian Hall, 7th Street, Calumet, MI, at its junction with Elm Street, one block south of Highway 203), and the site has not been built over. One of the plaques has a picture of Woody and mentions this song. There are quite a few recent photos of the site on Google Maps. - RBW
Last updated in version 6.1
File: FSWB306A
I then used a script with regular expressions to import while doing the following:
NaN to allow for better data manipulationThese are stored in df_bi.
Target: 30445 file records | Output: 30418 file records
| name | key_name | keywords | description | long_description | found_in | bi_file | st_file | dt_file | roud | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 10,000 Years Ago | I Was Born About Ten Thousand Years Ago (Bragg... | NaN | NaN | NaN | NaN | R410 | NaN | NaN | NaN |
| 1 | 10th MTB Flotilla Song | Fred Karno's Army | NaN | NaN | NaN | NaN | NeFrKaAr | NaN | NaN | NaN |
| 2 | 13 Highway | NaN | grief love promise nonballad lover technology | "I went down 13 highway, Down in my baby's doo... | NaN | US(SE) | Rc13Hwy | NaN | NaN | 29487 |
| 3 | 151 Days | Hundred and Fifty-One Days | NaN | NaN | NaN | NaN | Colq060 | NaN | NaN | NaN |
| 4 | 1861 Anti Confederation Song, An | Anti-Confederation Song | NaN | NaN | NaN | NaN | FJ028 | NaN | NaN | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 30412 | Zula | NaN | love rejection separation travel | "Thou lov'st another, Zula, Thou lovest him al... | NaN | US(So) | Brne049 | NaN | NaN | 11330 |
| 30413 | Zulu Warrior, The | NaN | nonballad nonsense campsong | "I-kama zimba zimba zayo I-kama zimba zimba ze... | NaN | NaN | ACFF061A | NaN | NaN | NaN |
| 30414 | Zum Gali Gali | NaN | foreignlanguage campsong | Hebrew. "Zum, gali-gali-gali, Zum gali-gali, Z... | NaN | NaN | ACSF314Z | NaN | NaN | NaN |
| 30415 | Zutula Dead | NaN | death poison food | A nice girl gave Zutula bitter casava to eat a... | NaN | West Indies(Trinidad) | RcALZuDe | NaN | NaN | NaN |
| 30416 | Zwei Soldaten, Die | NaN | foreignlanguage soldier food homicide suicide ... | German. "Es war einmal zwei Bauersohn, Die hat... | NaN | US(MW) | RDL056 | NaN | NaN | NaN |
30417 rows × 10 columns
Next I want to make stubs inherit Roud number and file references from their parent entries. I do this via a lookup table containing only those 'bi_file' entries that have the other data associated:
| bi_file | st_file | dt_file | roud | |
|---|---|---|---|---|
| 2 | Rc13Hwy | NaN | NaN | 29487 |
| 5 | FSWB306A | NaN | MASS1913* | 17663 |
| 8 | Hopk112 | NaN | NaN | 29405 |
| 11 | Hopk039 | NaN | NaN | 29404 |
| 12 | Hopk046 | NaN | NaN | 29403 |
| ... | ... | ... | ... | ... |
| 30399 | San449 | San449 (Full) | NaN | 12174 |
| 30403 | SuSm091B | NaN | NaN | 20694 |
| 30405 | Dett196 | NaN | NaN | 15233 |
| 30406 | Fus214 | Fus214 (Partial) | NaN | 16373 |
| 30412 | Brne049 | NaN | NaN | 11330 |
12420 rows × 4 columns
| name | key_name | keywords | description | long_description | found_in | bi_file | st_file | dt_file | roud | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 10,000 Years Ago | I Was Born About Ten Thousand Years Ago (Bragg... | NaN | NaN | NaN | NaN | R410 | NaN | NaN | NaN |
| 1 | 10th MTB Flotilla Song | Fred Karno's Army | NaN | NaN | NaN | NaN | NeFrKaAr | NaN | NaN | NaN |
| 2 | 13 Highway | NaN | grief love promise nonballad lover technology | "I went down 13 highway, Down in my baby's doo... | NaN | US(SE) | Rc13Hwy | NaN | NaN | 29487 |
| 3 | 151 Days | Hundred and Fifty-One Days | NaN | NaN | NaN | NaN | Colq060 | NaN | NaN | NaN |
| 4 | 1861 Anti Confederation Song, An | Anti-Confederation Song | NaN | NaN | NaN | NaN | FJ028 | NaN | NaN | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 30412 | Zula | NaN | love rejection separation travel | "Thou lov'st another, Zula, Thou lovest him al... | NaN | US(So) | Brne049 | NaN | NaN | 11330 |
| 30413 | Zulu Warrior, The | NaN | nonballad nonsense campsong | "I-kama zimba zimba zayo I-kama zimba zimba ze... | NaN | NaN | ACFF061A | NaN | NaN | NaN |
| 30414 | Zum Gali Gali | NaN | foreignlanguage campsong | Hebrew. "Zum, gali-gali-gali, Zum gali-gali, Z... | NaN | NaN | ACSF314Z | NaN | NaN | NaN |
| 30415 | Zutula Dead | NaN | death poison food | A nice girl gave Zutula bitter casava to eat a... | NaN | West Indies(Trinidad) | RcALZuDe | NaN | NaN | NaN |
| 30416 | Zwei Soldaten, Die | NaN | foreignlanguage soldier food homicide suicide ... | German. "Es war einmal zwei Bauersohn, Die hat... | NaN | US(MW) | RDL056 | NaN | NaN | NaN |
30417 rows × 10 columns
Next I need to handle cases where more than one DT filename is associated with each record, to allow for correct data merging later. I will assign the duplicates to new rows, first discarding DT numbers and other characters that do not constitute a valid DT filename.
A visual check suggests the cleaning worked:
| name | bi_file | dt_file | |
|---|---|---|---|
| 13779 | Johnny Fill Up the Bowl (In Eighteen Hundred a... | R227 | ABEWASH FORBALES |
| 176 | Admiral Benbow (I) | PBB076 | ADBENBOW ADBENBW2 |
| 15110 | Let Me In This Ae Nicht | DTaenich | AENICHT COLDRAIN |
| 198 | After the Ball | SRW169 | AFTRBALL UNFORTU6 |
| 223 | Aiken Drum | OO2007 | AIKDRUM AIKDRUM3 |
| ... | ... | ... | ... |
| 28425 | Weaver and the Factory Maid, The | DTwvfact | WVFACTGL WEAVFACT |
| 3176 | Brisk Young Butcher, The | DTxmasgo | XMASGOOS XMASGOO2 |
| 22203 | Rare Willie Drowned in Yarrow, or, The Water o... | C215 | YARROW2 YARROW3 |
| 30179 | Young Allan [Child 245] | C245 | YNGALAN YNGALAN2 |
| 23899 | Seventeen Come Sunday [Laws O17] | LO17 | YONHIGH ROCKYMT TROOPRM2 |
450 rows × 3 columns
Now to split the valid filenames into their own rows and examine the changed rows:
/tmp/ipykernel_158075/1738651564.py:16: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead. new_df = new_df.append(row, ignore_index=True) # Include rows with NaN filenames /tmp/ipykernel_158075/1738651564.py:14: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead. new_df = new_df.append(new_row, ignore_index=True)
| name | bi_file | dt_file | |
|---|---|---|---|
| 85 | Abdul the Bulbul Emir (II) | EM210 | ABDULBL2 |
| 84 | Abdul the Bulbul Emir (I) | LxA341 | ABDULBUL |
| 48 | A-Begging I Will Go | K217 | ABEGGIN |
| 14132 | Johnny Fill Up the Bowl (In Eighteen Hundred a... | R227 | ABEWASH |
| 5795 | David's Lamentation | FSWB412B | ABSALON |
| ... | ... | ... | ... |
| 6848 | Drummer Boy of Waterloo, The [Laws J1] | LJ01 | YOUNGED |
| 14832 | Kingdom Coming (The Year of Jubilo) | R230 | YRJUBILO |
| 31061 | Zack, the Mormon Engineer | BRaF444 | ZACKMORM |
| 31067 | Zebra Dun, The [Laws B16] | LB16 | ZEBRADUN |
| 31064 | Zeb Tourney's Girl [Laws E18] | LE18 | ZEBTURNY |
2489 rows × 3 columns
The next stage is to extract possible DT filenames from the bi_file entries. I will match these later on the DT data. Of the entries with BI filenames with this 'DTxxxxxx' pattern, 168 are missing DT filenames:
| name | bi_file | dt_file | |
|---|---|---|---|
| 432 | Allan Water | DTalanwa | NaN |
| 493 | Altoona Freight Wreck, The | DTwrck12 | NaN |
| 1133 | B'y' Sara Burned Down | DTBayous | NaN |
| 1188 | Back and Side Go Bare, Go Bare! | DTbcksid | NaN |
| 1387 | Banks of Allen Water, The | DTalanwa | NaN |
| ... | ... | ... | ... |
| 30282 | Winter It Is Past, The | DTcurrki | NaN |
| 30290 | Winter's Gone and Past | DTcurrki | NaN |
| 30307 | Wise Willie | DTcutywr | NaN |
| 30455 | Wreck at Latona, The | DTwrck12 | NaN |
| 31046 | Your Grannie and Your Other Grannie | DTgranbu | NaN |
168 rows × 3 columns
I will strip 'DT' from these filenames and insert them into the column 'dt_file' for affected rows:
| name | bi_file | dt_file | |
|---|---|---|---|
| 432 | Allan Water | DTalanwa | alanwa |
| 493 | Altoona Freight Wreck, The | DTwrck12 | wrck12 |
| 1133 | B'y' Sara Burned Down | DTBayous | Bayous |
| 1188 | Back and Side Go Bare, Go Bare! | DTbcksid | bcksid |
| 1387 | Banks of Allen Water, The | DTalanwa | alanwa |
| ... | ... | ... | ... |
| 30282 | Winter It Is Past, The | DTcurrki | currki |
| 30290 | Winter's Gone and Past | DTcurrki | currki |
| 30307 | Wise Willie | DTcutywr | cutywr |
| 30455 | Wreck at Latona, The | DTwrck12 | wrck12 |
| 31046 | Your Grannie and Your Other Grannie | DTgranbu | granbu |
168 rows × 3 columns
DT file references:
Target: 2623 | Initial output: 2605 | Post-split: 3264
3432
ST file references:
Target: 1180 | Initial output: 1166 | Post-split: 1200
1200
Roud references:
Target: 12126 | Initial output: 12004 | Post-split: 12656
12656
Unique roud numbers: 11266 (note that this is inaccurate as multiple Roud numbers per field are sometimes still present)
11266
The following query shows I would have 3782 songs with Roud numbers and lyrics, if I were to now join up the data and all the referenced lyrics files could be extracted.
| name | roud | bi_file | st_file | dt_file | |
|---|---|---|---|---|---|
| 10003 | Gypsy Laddie, The [Child 200] | 1 | C200 | NaN | GYPLADD3 |
| 10000 | Gypsy Laddie, The [Child 200] | 1 | C200 | NaN | GYPDAVY |
| 10001 | Gypsy Laddie, The [Child 200] | 1 | C200 | NaN | GYPLADD |
| 10002 | Gypsy Laddie, The [Child 200] | 1 | C200 | NaN | GYPLADD2 |
| 10011 | Gypsy Laddie, The [Child 200] | 1 | C200 | NaN | GYPLADY |
| ... | ... | ... | ... | ... | ... |
| 16274 | Lord Cornwallis's Surrender | V50597 | SBoA088 | NaN | LRDCRNWL |
| 17588 | Memory of the Dead, The | V5143 | PGa039 | NaN | MEMRYDED |
| 25860 | Star-Spangled Banner, The | V5200 | MKr015 | NaN | STARSPAN |
| 6797 | Drive the Cold Winter Away (In Praise of Chris... | V9375 | Log293 | Log293 (Full) | ALLHAIL |
| 6796 | Drive the Cold Winter Away (In Praise of Chris... | V9375 | Log293 | Log293 (Full) | DRIVCOLD |
3784 rows × 5 columns
This number of songs could even increase if I could match variant lyrics also based on variant titles or if any new backwards file references to BI files are found in the two lyrics data sources.
I will copy these test modifications into df_bi and save to csv for further use.
The Supplementary Tradition is the lyrics index of the Ballad Index. Again, I must use regular expressions to extract the data, this time from supptrad.txt. This has a different format to the BI.
The main song title is listed at the head of the records, followed by the type of lyrics [Complete text(s) or Partial text(s)] followed by different versions of the lyrics marked [*** A ***, *** B ***, *** C ***, ...] often preceded by an alternate title and notes about the story and/or provenance of the lyrics.
===
Version 6.5 February 26, 2022
===
A Robin, Jolly Robin
Complete text(s)
*** A ***
A Robyn Jolly Robyn
From Percy/Wheatley, I.ii.4, pp. 186-187
"[P]rinted from what appears to be the most ancient of Dr.
Harrington's poetical MSS. and which has, therefore, been marked
[...]
A Robyn,
Jolly Robyn,
Tell me how thy leman doeth
And thou shalt know of myn.
'My lady is unkynde perde.'
Alack! why is she so?
'She loveth an other better than me;
And yet she will say no.'
[...]
*** B ***
(No title)
From Shakespeare, "Twelfth Night" Act IV, scene 2. In the scene,
the Clown and Malvolio are talking past each other. The text
below shows the reconstructed lines of the song, with Malvolio's
answers in the margin. Line numbers are in the left margin.
71 'Hey, Robin, jolly Robin,
72 Tell me how thy lady does.' Malv: Fool.
74 'My lady is unkind, perdie!' Malv: Fool.
76 'Alas, why is she so?' Malv: Fool, I say.
78 'She loves another.' Who calls, ha?
File: Perc1185
===
A, U, Hinny Bird
Partial text(s)
*** A ***
From Stokoe/Reay, Songs and Ballads of Northern England, pp. 160-161.
Its O, but aw ken well --
A, U, hinny burd;
The bonny lass o' Benwell,
A, U, A.
[...]
Due to the aforementioned song-based classification system of the BI, multiple alternate versions are often linked to one BI record file and key title. Later I may want to split the files into different versions, so I will treat the the main song record as a parent ('key_...') and treat the versions as children which will stand as individual records but inherit some values from their parents. Some of the alternate versions do not have their own names.
I want to extract: key_name, key_full_part, version_in_key, name, provenance [detected to exclude from lyrics], lyrics, bi_file [this belongs to key/parent but I want to name consistently for later data combinations]
| key_name | key_full_part | bi_file | version_in_key | provenance | name | lyrics | |
|---|---|---|---|---|---|---|---|
| 0 | A Robin, Jolly Robin | Complete text(s) | Perc1185 | A | From Percy/Wheatley, I.ii.4, pp. 186-187 | A Robyn Jolly Robyn | "[F]rom what appears to be the most ancient of... |
| 1 | A Robin, Jolly Robin | Complete text(s) | Perc1185 | B | From Shakespeare, "Twelfth Night" Act IV, scen... | (No title) | 71 'Hey, Robin, jolly Robin, 72 Tell me how... |
| 2 | A, U, Hinny Bird | Partial text(s) | StoR160 | A | From Stokoe/Reay, Songs and Ballads of Norther... | NaN | A, U, hinny burd; The bonny lass o' Benwell, A... |
| 3 | Adieu to Erin (The Emigrant) | Complete text(s) | SWMS255 | A | As found in Gale Huntington, Songs the Whaleme... | Adieu to Erin | Oh, when I breathed a last adieu, To Erin's an... |
| 4 | Agincourt Carol, The | Complete text(s) | MEL51 | A | From the Bodleian Library (Cambridge), MS. Sel... | The Song of Agincourt | Deo gracias anglia, Redde pro victoria, 1 Owre... |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 1224 | Young Strongbow | Partial text(s) | FlNG210 | A | From Helen Hartness Flanders, Elizabeth Flande... | NaN | In olden times there came, A likely youth who ... |
| 1225 | Young Waters [Child 94] | Complete text(s) | C094 | A | From Percy/Wheatley, II.ii.18, pp. 229-231 | NaN | one sheet 8vo.", About Yule, quhen the wind bl... |
| 1226 | Zeb Tourney's Girl [Laws E18] | Complete text(s) | LE18 | A | As recorded by Vernon Dalhart, 1926. Transcrib... | NaN | Down in the Tennessee mountains, Away from the... |
| 1227 | Zek'l Weep | Complete text(s) | San449 | A | From Carl Sandburg, The American Songbag, pp. ... | NaN | 1 Zek'l weep, Zek'l moan, Flesh come a-creepin... |
| 1228 | Zion's Sons and Daughters | Partial text(s) | Fus214 | A | From Harvey H. Fuson, Ballads of the Kentucky ... | NaN | See the fountain opened wide, That from sinnin... |
1229 rows × 7 columns
Target: 1136 records | Output: 1229 records
The only Mudcat Digitrad file available to download is an askSam 32-bit MS-DOS database which I was not able to open. I was able to access a database file in the ZIP where lyrics were visible in plan text. However, a lack of consistent record delimiters, field labels/delimiters, and the presence of many (often invisible) unicode control characters made extraction challenging and unreliable.
askSam x| ~ 7 | * 2Ò
P ÛÍ {ÜÍ e
Œ ÛÍ `Ó & {forget} {rem} ¥ ö : ] :SI5ÿÿUse your cursor control keys to light up a search, then press <CR>:ÿ_____________________________________________________________________________ :QUICKÿLISTÿLists filenames and titles of all songs whose filename, firstÿline or keyword list contains the search string you enter.ÿSearch string must be a single word or phrase. :FULL SEARCHÿLists filenames and titles of all songs containing the searchÿstring anywhere within the text. Multiple words OK. :RETURNÿGo back to previous list. You can repeat this until you doÿanother search. :CONTEXTÿÿLists the filename and an in-context view of any other word inÿÿall songs that meet your search specification. ÿ______________________________________________________________________________ÿPress spacebar for more options: The next screens let you save files to disk,ÿÿand have several Help menus. g & :DISKÿLISTÿSaves the list of remembered items to a file called LIST.TXT:DISKÿSHOWÿSaves the lyrics of the files in the remembered list to a fileÿcalled SHOW.TXT 2 ¥ [...] If you type MA while the text of the song is displayed, the"{mes :r15 "lightbar will shrink to cover a single word. Light up any word"{mes :r16 "that interests you, and a press of <Enter> will find all the songs "{mes :r17 "that have that word."{mes :r18 "To print a list of titles (with filenames), quit the program,"{mes :r19 " set up your printer for 12 pitch (elite), type <titles> and have "